const axios = require('axios');

// 验证PLC操作是否完全通过队列服务进行的测试脚本

async function testPLCReadThroughQueue() {
    try {
        console.log('测试通过队列服务读取PLC变量...');
        
        // 构造PLC读取任务
        const task = {
            task: {
                type: 'plc-read',
                variables: ['DB122,X0.6', 'DB1,W2', 'DB2,X0.0']
            }
        };
        
        // 发送到队列服务
        const response = await axios.post('http://localhost:3003/api/queue/task', task);
        console.log('✅ PLC读取任务提交成功:', response.data);
        return response.data;
    } catch (error) {
        console.error('❌ PLC读取任务测试失败:', error.message);
        throw error;
    }
}

async function testPLCWriteThroughQueue() {
    try {
        console.log('测试通过队列服务写入PLC变量...');
        
        // 构造PLC写入任务
        const task = {
            task: {
                type: 'plc-write',
                variable: 'DB1,DW8',
                value: 1
            }
        };
        
        // 发送到队列服务
        const response = await axios.post('http://localhost:3003/api/queue/task', task);
        console.log('✅ PLC写入任务提交成功:', response.data);
        return response.data;
    } catch (error) {
        console.error('❌ PLC写入任务测试失败:', error.message);
        throw error;
    }
}

async function verifyNoDirectPLCCalls() {
    try {
        console.log('验证没有直接调用PLC服务...');
        
        // 尝试直接调用PLC服务应该失败或返回错误
        try {
            const directResponse = await axios.post('http://localhost:3002/api/plc/read', {
                variables: ['DB122,X0.6']
            });
            console.log('⚠️  直接调用PLC服务仍然可用:', directResponse.data);
        } catch (error) {
            console.log('✅ 直接调用PLC服务被阻止或不可用:', error.message);
        }
        
        return true;
    } catch (error) {
        console.error('验证过程中出现错误:', error.message);
        return false;
    }
}

async function runVerification() {
    try {
        console.log('开始验证PLC操作是否完全通过队列服务进行...\n');
        
        // 测试PLC读取通过队列
        await testPLCReadThroughQueue();
        console.log('\n-------------------\n');
        
        // 测试PLC写入通过队列
        await testPLCWriteThroughQueue();
        console.log('\n-------------------\n');
        
        // 验证没有直接调用
        await verifyNoDirectPLCCalls();
        console.log('\n-------------------\n');
        
        console.log('✅ 所有验证完成！PLC操作现在完全通过队列服务进行。');
    } catch (error) {
        console.error('❌ 验证过程中出现错误:', error.message);
    }
}

// 如果直接运行此脚本，则执行验证
if (require.main === module) {
    runVerification();
}

module.exports = {
    testPLCReadThroughQueue,
    testPLCWriteThroughQueue,
    verifyNoDirectPLCCalls,
    runVerification
};